#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <string>
using namespace std;

void handler(int signo){
    cout << "process,pid: "<<getpid()<<" get a signal: " << signo << endl;

    // exit(0);
}

int main(int argc, char *argv[]){
    // if(argc!=3){
    //     cout << "Usage:\n\t" << "kill signal pid\n" << endl;
    //     exit(1);
    // }

    // int signum = stoi(argv[1]);
    // pid_t pid = stoi(argv[2]);

    // int n = kill(pid, signum);
    // if(n == -1){
    //     perror("kill");
    //     exit(2);
    // }
    
    // // raise函数
    // signal(2, handler);
    // int cnt = 5;
    // while (true)
    // {
    //     cout << "I am a process, pid: " << getpid() << endl;
    //     sleep(1);
    //     cnt--;
    //     if(cnt==0){
    //         raise(2);
    //     }
        
    // }

    // // abort函数
    // signal(6, handler);
    // int cnt = 5;
    // while(true){
    //     cout << "I am a process, pid: " << getpid() << endl;
    //     sleep(1);
    //     cnt--;
    //     if(cnt==0){
    //         abort();
    //     }
    // }


    // 硬件异常
    // 除零错误
    // signal(8, handler);
    // int a = 10;
    // int b = 0;
    // int c = a / b;
    // cout << c << endl;

    // 野指针错误
    // int *p = nullptr;
    // *p = 10;
    // cout << *p << endl;

    // 软件条件---闹钟
    signal(14, handler);
    int n = alarm(5);

    while(true){
        cout << "I am a process, pid" << getpid() << endl;
        sleep(1);
    }
    return 0;
}